package jmine.tec.proxy;

import jmine.tec.proxy.chain.ChainElement;

/**
 * @author MarceloT
 */
public interface ProxyBuilder {

    /**
     * @param delegate the delegate
     */
    void setDelegate(Object delegate);

    /**
     * @param ifs the interfaces
     */
    void setInterfaces(Class<?>... ifs);

    /**
     * @param elements the chain elements to attach to the proxy
     */
    void setChainElements(ChainElement... elements);

    /**
     * Sets the main type, if any
     * @param type the type
     */
    void setMainType(Class<?> type);

    /**
     * @return Object
     */
    Object build();

}
